package org.looop.studio.bean.factory;

import java.lang.reflect.InvocationTargetException;
import java.util.List;

import org.looop.studio.bean.domain.BeanDefinition;
import org.looop.studio.bean.scope.BeanScope;

public interface BeanFactory {
	public Object getBean(String id) throws InstantiationException,
	IllegalAccessException, ClassNotFoundException, IllegalArgumentException, SecurityException, InvocationTargetException, NoSuchMethodException;
	
	public List<Object> getBeansByClassName(Class clazz) throws IllegalArgumentException, SecurityException, InstantiationException, IllegalAccessException, ClassNotFoundException, InvocationTargetException, NoSuchMethodException;
	
	public Object createBean(BeanDefinition beanDefinition)
			throws InstantiationException, IllegalAccessException,
			ClassNotFoundException, IllegalArgumentException, SecurityException, InvocationTargetException, NoSuchMethodException;

	public void registerBeanScope(String key, BeanScope scope);
}